導讀:建站后,隨著內容的不斷豐富,各種文字、圖片、腳本的增加,如果沒有妥當?shù)奶幚矸绞?,網(wǎng)頁訪問速度會逐漸降低。在這個追求時效的信息快時代,網(wǎng)頁訪問者的耐心正在降低。據(jù)研究表明,用
發(fā)表日期:2019-12-23
文章編輯:興田科技
瀏覽次數(shù):9203
標簽:
建站后,隨著內容的不斷豐富,各種文字、圖片、腳本的增加,如果沒有妥當?shù)奶幚矸绞剑W(wǎng)頁訪問速度會逐漸降低。在這個追求時效的信息快時代,網(wǎng)頁訪問者的耐心正在降低。
據(jù)研究表明,用戶對打開速度2秒以下的網(wǎng)頁表示滿意,而其能夠忍受的最長等待時間是6~8秒。而8秒作為一個臨界值,如果你的網(wǎng)站打開速度超過8秒,那么很可能,大部分訪問者會因此離你而去。相關數(shù)據(jù)顯示,如果網(wǎng)頁加載時間超過12秒,99%以上的訪問者會關閉頁面,不再等待。
那么今天美橙將給大家?guī)砭W(wǎng)頁提速的新招,即動靜分離。
動靜分離,那么什么動態(tài)的,什么是靜態(tài)的呢?
訪問網(wǎng)頁的時候,我們總會發(fā)現(xiàn)瀏覽器會加載各種各樣的文件,有html文件,有css樣式表,有js腳本,還有圖片,還有流媒體等各種文件,這些其實就是靜態(tài)的文件,放在服務器上,無須動態(tài)生成的文件那么就是靜態(tài)文件。那么什么是動態(tài)文件呢?例如java寫的jsp文件,需要通過編譯器進行編譯成字節(jié)碼文件,然后在java虛擬機上運行,運行之后,返回給客戶端一個響應,有的時候,還需要到數(shù)據(jù)庫中取出數(shù)據(jù),那么這種需要經(jīng)過編譯的文件就稱之為動態(tài)文件。
動態(tài)文件的處理比靜態(tài)文件的處理速度要慢N倍,慢在啥地方呢?首先,動態(tài)文件需要編譯,耗費時間,動態(tài)文件要去連接數(shù)據(jù)庫,耗費時間,動態(tài)文件需要組織成http響應,耗費時間,根據(jù)java的流程,那么就是根據(jù)url,找到jsp文件,將jsp文件轉換成servlet文件,然后形成類文件,然后在jvm上運行,jvm可能還要加載額外的類文件,然后組成成響應返回給servlet,然后再返回給客戶端。
在使用動靜分離的時候,一般使用的模型如下所示:
<iframe id="video" id="iframe_0.7752190983764249" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3ia0OuFsDviaQ8oYpwibbzwibWznHibOVZOB3X1pRYtpYLMYCeuibCpUUIzWQ/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.7752190983764249',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>
在使用動靜分離的時候,需要將一些靜態(tài)的文件和動態(tài)的文件分離開來,從而使用nginx來處理靜態(tài)請求,而使用tomcat來處理動態(tài)的請求,從而會大大的提高處理速度,為啥?
nginx和httpd是專門用來處理靜態(tài)文件的,效率極高,并且由nginx直接響應,減少了向后端轉發(fā)的過程;將動態(tài)內容和靜態(tài)內容進行分離,可以提高資源利用率,nginx的性能得到發(fā)揮,也讓tomcat不會那么繁忙,動態(tài)服務器機器耗費性能,例如在java中的各種方法區(qū)對象的回收,堆內存的回收等。
構建動靜分離的環(huán)境
要想構建動靜分離的環(huán)境,那么就需要安裝nginx,安裝jdk,然后安裝tomcat,具體的步驟如下:
編譯安裝nginx:
[root@mogilenode2 nginx-1.10.1]# ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
[root@mogilenode2 nginx-1.10.1]# make && make install
[root@mogilenode2 ~]# /usr/local/nginx/sbin/nginx (啟動nginx)
[root@mogilenode2 ~]# netstat -tnlp|grep nginx(查看監(jiān)聽端口,并且使用瀏覽器訪問測試)
tcp0 0 0.0.0.0:80 0.0.0.0:*LISTEN 13933/nginx
<iframe id="video" id="iframe_0.11612649917182427" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM31uh6gibIib0c08bsibbaZyVG5uEpsE2zWt6xpicWBkMQ2mhC0fL7VzSThg/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.11612649917182427',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>
安裝jdk:
[root@mogilenode3 server]# rpm -ivh jdk-8u144-linux-x64.rpm
preparing...########################################### [100%]
1:jdk1.8.0_144########################################### [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
配置java環(huán)境變量:
[root@mogilenode3 server]# echo "export JAVA_HOME=/usr/java/latest">/etc/profile.d/java.sh
[root@mogilenode3 server]# echo "export pATH=$JAVA_HOME/bin:$pATH">>/etc/profile.d/java.sh
[root@mogilenode3 server]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export pATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
測試jdk及環(huán)境變量是否成功:
<iframe id="video" id="iframe_0.09957966243735061" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3k3kRmughY6ueB50LRwa68OE5arH3Cal8FRY7rD604lzrteJTw3ZicHw/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.09957966243735061',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>
安裝tomcat:
[root@mogilenode3 server]# tar -xf apache-tomcat-8.5.20.tar.gz -C /usr/local/
l[root@mogilenode3 server]# ln -sv /usr/local/apache-tomcat-8.5.20/ /usr/local/tomcat
/usr/local/tomcat' -> /usr/local/apache-tomcat-8.5.20/'
配置tomcat環(huán)境變量:
[root@mogilenode3local]# vim /etc/profile.d/tomcat.sh
[root@mogilenode3local]# cat !$
cat/etc/profile.d/tomcat.sh
exportCATALINA_HOME=/usr/local/tomcat
exportpATH=$CATALINA_HOME/bin:$pATH
測試tomcat是否安裝成功:
[root@mogilenode3 ~]# netstat -tnlp|grep java(注意瀏覽器訪問的時候,添加端口號來進行訪問)
tcp 0 0 :::8080 :::* LISTEN 1125/java
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 1125/java
tcp 0 0 :::8009 :::* LISTEN 1125/java
<iframe id="video" id="iframe_0.5096301174071962" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3HSibib7G7mJXzEg4xO93n5Oqhog7YRsGMNmdojHWxDWeKyfuibDnAv9Jg/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.5096301174071962',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>
創(chuàng)建動態(tài)文件根據(jù)java的目錄層次結構,寫一個基本的頁面,如下:
[root@mogilenode3webapps]# mkdir kel
[root@mogilenode3webapps]# cd kel
[root@mogilenode3kel]# ls -l
total 0
[root@mogilenode3kel]# mkdir {META-INF,WEB-INF,classes,lib}
[root@mogilenode3kel]# vim index.jsp
[root@mogilenode3kel]# cat index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JAVA pAGE</title>
</head>
<body>
<% out.println("Hello,World"); %>
</body>
</html>
[root@mogilenode3kel]# ls -l
total 20
drwxr-xr-x 2 root root 4096 Sep 20 14:46 classes
-rw-r--r-- 1 root root 201 Sep 20 14:46 index.jsp
drwxr-xr-x 2 root root 4096 Sep 20 14:46 lib
drwxr-xr-x 2 root root 4096 Sep 20 14:46 META-INF
drwxr-xr-x 2 root root 4096 Sep 20 14:46 WEB-INF
修改tomcat的配置文件server.xml(添加一個虛擬主機,主機名為www.kel.com,,默認路徑為webapps下面的kel目錄):
<Host name="www.kel.com" appBase="webapps" unpackWARS="true" autoDeploy="true">
<Context path="" docBase="kel" reloadable="true" />
</Host>
測試訪問:
[root@mogilenode3conf]# grep "www.kel.com" /etc/hosts (設置主機名解析)
192.168.1.238 www.kel.com
[root@mogilenode3conf]# curl http://www.kel.com:8080 (使用curl進行訪問)
<html>
<head>
<title>JAVA pAGE</title>
</head>
<body>
Hello,World
</body>
</html>
配置nginx
配置主機名解析:
[root@mogilenode2nginx]# grep "www.kel.com" /etc/hosts
192.168.1.237 www.kel.com
[root@mogilenode2conf]# ls -l nginx.conf(修改nginx配置文件,將動態(tài)請求也就是文件后綴為jsp或者do的請求轉發(fā)到tomcat上,由于是虛擬主機,所以url中必須寫上主機名,靜態(tài)頁面在nginx上處理,靜態(tài)頁面在html路經(jīng)下)
-rw-r--r-- 1 root root 2727 Sep 20 15:09 nginx.conf
server_name www.kel.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
roothtml;
index index.html index.htm;
}
location ~* .(jsp|do)$ {
proxy_passhttp://www.kel.com:8080;
}
上傳靜態(tài)文件到nginx的html目錄中,用來測試靜態(tài)文件的訪問:
[root@mogilenode2 nginx]# ls -l html/1.jpg
-rw-r--r-- 1 root root 25854 Sep 20 15:13 html/1.jpg
訪問nginx服務器測試靜態(tài)文件訪問:
<iframe id="video" id="iframe_0.9560413911496475" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3nJ2Zz2J77fVczm9ykrZXR85uLyAfBtoAptqYupyDRQvILwKkkbVr4A/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9560413911496475',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>
訪問nginx服務器,測試動態(tài)頁面訪問:
<iframe id="video" id="iframe_0.9675013371761754" src="data:text/html;charset=utf8,%3Cstyle%3Ebody%7Bmargin:0;padding:0%7D%3C/style%3E%3Cimg%20id=%22img%22%20src=%22https://mmbiz.qlogo.cn/mmbiz_png/7QpC8diafAtWIotaWQfdlxS6B4OTl2iaM3FsWwmibicCp2Uvb9hGnrkHicrZplxpoiac9NVABWOMgSeia00n6sic8eLn0A/0?wx_fmt=png&_=7565697%22%20style=%22border:none;max-width:701px%22%3E%3Cscript%3Ewindow.onload%20=%20function%20()%20%7Bvar%20img%20=%20document.getElementById('img');%20window.parent.postMessage(%7BiframeId:'iframe_0.9675013371761754',width:img.width,height:img.height%7D,%20'http://www.cnblogs.com');%7D%3C/script%3E" frameborder="0"></iframe>
總結總體上來說,動靜分離還是比較簡單的,主要讓前端的代理服務器直接響應靜態(tài)請求,讓前端的代理服務器轉發(fā)動態(tài)請求到后端的tomcat服務器即可。
注意上面的是實驗環(huán)境,對于tomcat的運行的用戶是直接的root用戶,在生產中,必須修改為其他不能登錄的用戶,例如tomcat用戶。
上一篇:
《從零開始做運營》精華摘抄(一)更多新聞
2023
概述在今天的數(shù)字時代,擁有一個動態(tài)和專業(yè)的網(wǎng)站對于任何業(yè)務來說是至關重要的。。然而,隨著時間的推移,...
View details
2023
引言在當今數(shù)字化時代,防城港企業(yè)要想在競爭激烈的市場中脫穎而出,網(wǎng)絡營銷是非常重要的。。通過利用互聯(lián)...
View details
2023
引言在當今競爭激烈的在線市場中,擁有一個有效的網(wǎng)絡推廣策略對于任何企業(yè)的成功至關重要。。安順網(wǎng)絡推廣...
View details
2023
引言在當今數(shù)字化時代,網(wǎng)絡推廣建設對于企業(yè)的業(yè)務發(fā)展至關重要。。德州網(wǎng)絡推廣建設是一個卓越而強大的工...
View details